package com.ssy.lingxi.common.constant.member;

import com.ssy.lingxi.common.language.LanguageHolder;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 会员等级类型枚举 （非常重要）
 */
public enum MemberLevelTypeEnum {
    /**
     * 平台会员（上级会员是平台后台，无论任何角色） - 1
     */
    PLATFORM(1, "平台会员"),

    /**
     * 商户会员（上级会员不是平台后台，且会员角色为企业会员、或企业个人会员） - 2
     */
    MERCHANT(2, "商户会员"),

    /**
     * 渠道会员（上级会员不是平台后台，且会员角色为渠道会员、或渠道个人会员） - 3
     */
    CHANNEL(3, "渠道会员");

    private Integer code;

    MemberLevelTypeEnum(Integer code, String message) {
        this.code = code;
    }

    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return LanguageHolder.getName(this.getClass(), this.getCode());
    }

    public static String getCodeMsg(Integer code) {
        return LanguageHolder.getName(MemberLevelTypeEnum.class, code);
    }

    public static Integer getCodeByMemberType(Integer memberTypeEnum) {
        if(memberTypeEnum.equals(MemberTypeEnum.MERCHANT.getCode()) || memberTypeEnum.equals(MemberTypeEnum.MERCHANT_PERSONAL.getCode())) {
            return MemberLevelTypeEnum.MERCHANT.getCode();
        } else {
            return MemberLevelTypeEnum.CHANNEL.getCode();
        }
    }

    public static MemberLevelTypeEnum getByMemberType(Integer memberTypeEnum) {
        if(memberTypeEnum.equals(MemberTypeEnum.MERCHANT.getCode()) || memberTypeEnum.equals(MemberTypeEnum.MERCHANT_PERSONAL.getCode())) {
            return MERCHANT;
        } else {
            return CHANNEL;
        }
    }

    public static List<Integer> toList() {
        return Arrays.stream(MemberLevelTypeEnum.values()).map(MemberLevelTypeEnum::getCode).collect(Collectors.toList());
    }
}
